const data = 10;
console.log(data);//10
//data = 100; //执行错误

const list = [10,20,30];
console.log(list); 

list[0] = 100;
console.log(list);//[ 100, 20, 30 ]

list.push(99);
console.log(list); // [ 100, 20, 30, 99 ]

//list = [1,2,3]; //错误

//1:const 声明一个只读变量，声明之后不允许改变。意味着，一但声明必须初始化，否则会报错。

//ps:ES6 明确规定，代码块内如果存在 let 或者 const，代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。

//注意
/*const 如何做到变量在声明初始化之后不允许改变的？其实 const 其实保证的不是变量的值不变，而是保证变量指向的内存地址所保存的数据不允许改动。
 * 此时，你可能已经想到，简单类型和复合类型保存值的方式是不同的。是的，对于简单类型（数值 number、字符串 string 、布尔值 boolean）,值就保存在变量指向的那个内存地址，因此 const 声明的简单类型变量等同于常量。
 * 而复杂类型（对象 object，数组 array，函数 function），变量指向的内存地址其实是保存了一个指向实际数据的指针，所以 const 只能保证指针是固定的，至于指针指向的数据结构变不变就无法控制了，所以使用 const 声明复杂类型对象时要慎重。*/

var PI = "a";
if(true){
  console.log(PI);  // ReferenceError: PI is not defined
  const PI = "3.1415926";

}